package structural

// 外观模式
// 即有多个实例方法组合而成一个方法单独使用

var fi *FacadeModel

type FacadeModel struct {
	Name string
}

type iFacade interface {
	GetFacadeModel() *FacadeModel
	CreateFacadeModel() *FacadeModel
}

type Facade interface {
	GetOrCreateFacadeModel() *FacadeModel
}

type IFacadeService struct{}

func (f *IFacadeService) GetFacadeModel() *FacadeModel {
	return fi
}

func (f *IFacadeService) CreateFacadeModel() *FacadeModel {
	fi = &FacadeModel{
		Name: "Ming",
	}
	return fi
}

func (f *IFacadeService) GetOrCreateFacadeModel() *FacadeModel {
	ist := f.GetFacadeModel()
	if ist != nil {
		return ist
	}

	ist = f.CreateFacadeModel()

	return ist
}
